package com.ian.day;

/**
 * @author zhangyaowen
 * @date 2021/7/21 10:54 下午
 */

/**
 * 给定一个字符串，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。
 *
 *  
 *
 * 示例：
 *
 * 输入："Let's take LeetCode contest"
 * 输出："s'teL ekat edoCteeL tsetnoc"
 *  
 *
 * 提示：
 *
 * 在字符串中，每个单词由单个空格分隔，并且字符串中不会有任何额外的空格。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/reverse-words-in-a-string-iii
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class ReverseWords {
    public String reverseWords(String s) {

        char[] cs = s.toCharArray();

        int a = 0;
        int b = 0;
        int len = cs.length;

        while(b<len){
            if (cs[b] == ' '){
                int l = a,r =b-1;
                while(l<r){
                    swap(cs,l++,r--);
                }
                a = b+1;
            }
            b++;
        }
        b--;
        while(a<b){
            swap(cs,a++,b--);
        }


        return String.valueOf(cs);
    }

    private void swap(char[] s,int l,int r){
        char t  =s[l];
        s[l] = s[r];
        s[r] = t;
    }

    public static void main(String[] args) {

        String s = "Let's take LeetCode contest";

        ReverseWords reverseWords = new ReverseWords();
        System.out.println(reverseWords.reverseWords(s));

    }

}
